package org.qianji.goosql.dql.clause;

import org.qianji.goosql.Fragment;
import org.qianji.goosql.cond.Condition;
import org.qianji.goosql.dql.Join;
import org.qianji.goosql.table.Table;

/**
 * From子句
 * 
 * @author gmz
 * 
 */
public interface From extends Fragment {

	/**
	 * 内关联。
	 * 
	 * @param table
	 *            {@link Table} 表
	 * @param cond
	 *            {@link Condition} 关联条件
	 * @return {@link From} 关联后生成的新的From子句
	 */
	public From innerJoin(Table table, Condition cond);

	/**
	 * 左关联。
	 * 
	 * @param table
	 *            {@link Table} 表
	 * @param cond
	 *            {@link Condition} 关联条件
	 * @return {@link From} 关联后生成的新的From子句
	 */
	public From leftJoin(Table table, Condition cond);

	/**
	 * 右关联。
	 * 
	 * @param table
	 *            {@link Table} 表
	 * @param cond
	 *            {@link Condition} 关联条件
	 * @return {@link From} 关联后生成的新的From子句
	 */
	public From rightJoin(Table table, Condition cond);

	/**
	 * 全关联。
	 * 
	 * @param table
	 *            {@link Table} 表
	 * @param cond
	 *            {@link Condition} 关联条件
	 * @return {@link From} 关联后生成的新的From子句
	 */
	public From fullJoin(Table table, Condition cond);

	/**
	 * 关联。
	 * 
	 * @param table
	 *            {@link Table} 表
	 * @param cond
	 *            {@link Condition} 关联条件
	 * @param join
	 *            {@link Join} 关联类型
	 * @return {@link From} 关联后生成的新的From子句
	 */
	public From join(Table table, Condition cond, Join join);

}
